﻿using System;
using System.Collections.Generic;
using System.Text;

namespace AzManADAMStore
{
    /// <summary>
    /// Clase que encapsula una tarea
    /// </summary>
    public class Task
    {
        /// <summary>
        /// Path en ADAM
        /// </summary>
        public string Path;

        /// <summary>
        /// Nombre de la operación
        /// </summary>
        public string Name;

        /// <summary>
        /// Descripción de la operación
        /// </summary>
        public string Description;

        /// <summary>
        /// Tareas asociadas
        /// </summary>
        public Task.TaskList Tasks;

        /// <summary>
        /// Operaiones asociadas a la tarea
        /// </summary>
        public Operation.OperationList Operations;


        public Task()
        {
            this.Tasks = new Task.TaskList();
            this.Operations = new Operation.OperationList();
        }


        /// <summary>
        /// Crea una instancia con los mismos valores
        /// </summary>
        /// <returns></returns>
        public Task Clone()
        {
            Task newTask = new Task();
            this.Copy(newTask);
            return newTask;
        }

        /// <summary>
        /// Copia los valores de la instancia actual
        /// </summary>
        /// <param name="NuevoTask">Instancia de destino</param>
        public void Copy(Task NuevoTask)
        {
            NuevoTask.Path = this.Path;
            NuevoTask.Name = this.Name;
            NuevoTask.Description = this.Description;
            if (this.Tasks != null)
                NuevoTask.Tasks = this.Tasks.Clone();
            if (this.Operations != null)
                NuevoTask.Operations = this.Operations.Clone();
        }


        /// <summary>
        /// Lista de tareas
        /// </summary>
        public class TaskList : SortedDictionary<string, Task>
        {
            /// <summary>
            /// Crea una instancia con los mismos valores
            /// </summary>
            /// <returns></returns>
            public TaskList Clone()
            {
                TaskList newLista = new TaskList();
                foreach (Task actualTask in this.Values)
                    newLista.Add(actualTask.Name, actualTask.Clone());

                return newLista;
            }

        }
    }
}
